<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>小镇伐木工</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <style>
        body {
            margin-left: 30px;
        }
    </style>
</head>

<body>
    <div id="box"></div>
    <script>
        
        let kuCun_daMuCai = 0    // 库存-大木材
        let kuCun_xiaoMuCai = 0  // 库存-小木材
        let beiBao_daMuCai = 0   // 背包-大木材
        let beiBao_xiaoMuCai = 0 // 背包-小木材
        let tiLi = 100 // 伐木工初始体力
        let zhuangTai_new = 0 // 当前状态
        let zhuangTai_old = 0 // 上个状态
        let flag = false // 是否可以输入
        
        // 改变状态 value:最新状态值
        function chang(value) {
            // 0 小镇上
            // 1 进入林场
            // 2 碰到大树
            // 3 碰到小树
            // 8 任意键
            zhuangTai_old = zhuangTai_new
            zhuangTai_new = value
            flag = true
        }

        /********************** 游戏开始 **********************/

        $('body').on('keydown', function (e) {fnKey(e.originalEvent.key)})

        fn(`在一座小镇上有位伐木工，他的工作就是每天要到林场去采集木料，以此谋生。人的体力总是有限的，而且这的确是份苦差事，他很辛苦，所以邀请你来代工一天`)

        fn('新的一天开始了，你刚刚在小镇用完早餐，准备工作了', 1000)

        fn(`[库存清单] 大木材:${kuCun_daMuCai} 小木材:${kuCun_xiaoMuCai}    (按任意键继续)`, 2000)

        chang(8)

        /********************** 游戏结束 **********************/

        // 键盘事件回调函数 value:按键值
        function fnKey(value) {
            if (!flag) return
            fn(value)

            setTimeout(() => {
                if (value.toUpperCase() == 'Y') {
                    if (zhuangTai_new == 1) fn1()
                    else if (zhuangTai_new == 2) fn2(1)
                    else if (zhuangTai_new == 3) fn3(1)
                    else if (zhuangTai_new == 8) fn8()
                } else if (value.toUpperCase() == 'N') {
                    if (zhuangTai_new == 1) fn8()
                    else if (zhuangTai_new == 2) fn2(0)
                    else if (zhuangTai_new == 3) fn3(0)
                    else if (zhuangTai_new == 8) fn8()
                } else if (value.toUpperCase()) {
                    if (zhuangTai_new == 8) fn8()
                }
            }, 1000);
        }

        // 进入林场时的行为
        function fn1() {
            tiLi -= 5
            fn(`体力-5,进入了林场 [体力:${tiLi}]`)
            setTimeout(chang(2), 0);
            fn(`发现了一棵大树，是否要采伐？(是则为Y，否则为N)  [体力:${tiLi}]`, 1000)
        }

        // 发现第1棵大树时的行为 s:要不要采集[Y:1、N:0]
        function fn2(s) {
            if (s) {
                tiLi -= 10
                fn(`体力-10，收获了1块大木材  [体力:${tiLi}]`)
                fn(`继续前行`, 1000)
                fn(`发现了一棵小树，是否要采伐？(是则为Y，否则为N)  [体力:${tiLi}]`, 2000)
                beiBao_daMuCai++
            } else {
                fn(`放弃了1块大木材  [体力:${tiLi}]`)
                fn(`继续前行`, 1000)
                fn(`发现了一棵小树，是否要采伐？(是则为Y，否则为N)  [体力:${tiLi}]`, 2000)
            }
            setTimeout(chang(3), 0);
        }

        // 发现第2棵小树时的行为 s:要不要采集[Y:1、N:0]
        function fn3(s) {
            if (s) {
                tiLi -= 10
                fn(`体力-10，收获了1块小木材  [体力:${tiLi}]`)
                beiBao_xiaoMuCai++
            } else {
                fn(`放弃了1块小木材  [体力:${tiLi}]`)
            }
            let time = 0
            fn(`就到这儿吧`, time += 1000)
            fn(`是时候回去了  [体力:${tiLi}]`, time += 1000)
            fn(` ~`, time += 1000)
            fn(` ~`, time += 1000)
            fn(` ~`, time += 1000)

            // 体力耗损值
            let tt = (beiBao_daMuCai + beiBao_xiaoMuCai) ? (beiBao_daMuCai * 20 + beiBao_xiaoMuCai * 10) : 5

            fn(`体力-${tt}，带着${beiBao_daMuCai + beiBao_xiaoMuCai}块木料回到小镇了  [体力:${tiLi -= tt}]`, time += 1000)
            kuCun_daMuCai += beiBao_daMuCai
            kuCun_xiaoMuCai += beiBao_xiaoMuCai
            beiBao_daMuCai = 0
            beiBao_xiaoMuCai = 0
            fn(`[库存清单] 大木材:${kuCun_daMuCai} 小木材:${kuCun_xiaoMuCai}    (按任意键继续)`, time += 1000)
            setTimeout(chang(8), 0);
        }

        // 在小镇上的行为
        function fn8() {
            if (zhuangTai_old == 0 || zhuangTai_old == 1 || zhuangTai_old == 3) {

                if (tiLi < 10) {
                    fn(`体力不足  [体力:${tiLi}]`)
                    fn(`今天是时候该休息了`, 1000)
                    return false
                }

                fn(`现在要进入林场吗？(是则为Y，否则为N)  [体力:${tiLi}]`)
                setTimeout(chang(1), 0);

            } else if (zhuangTai_old == 8) {

                fn(`[库存清单] 大木材:${kuCun_daMuCai} 小木材:${kuCun_xiaoMuCai}    (按任意键继续)`)

                setTimeout(chang(8), 0);
            }
        }

        // 在页面上打印文字 str:文字内容 time:执行时间
        function fn(str, time) {
            // 打印文字
            setTimeout(() => {
                $('#box').append($(`<p>${str}</p>`))
                settimefn('timeout_flag')
            }, time || 0)

            // 有滚动条时，卷动页面至最底部
            setTimeout(() => {
                window.scrollTo({
                    top: ($('#box').innerHeight() - window.innerHeight) + 10000,
                    behavior: 'smooth'
                });
            }, time += 1)
        }

        // 对交互事件进行防抖处理
        function settimefn(attu, time) {
            flag = false
            clearTimeout(window[attu])
            window[attu] = setTimeout(() => { flag = true }, time || 1000);
        }

    </script>
</body>

</html>